import axios from 'axios';

// 创建 axios 实例
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // 基础URL可以通过环境变量配置
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    const res = response.data;
    if (response.status !== 200) {
      // 根据你的业务逻辑处理非200状态码
      console.error('请求失败:', res.message || '未知错误');
      return Promise.reject(new Error(res.message || '未知错误'));
    } else {
      return res;
    }
  },
  error => {
    // 对响应错误做点什么
    console.error('请求失败:', error.message || '未知错误');
    return Promise.reject(error);
  }
);

/**
 * 封装的通用请求方法
 * @param {string} url - 请求地址
 * @param {Object} data - 请求参数
 * @param {string} method - 请求方法，默认为 GET
 * @param {Object} customHeaders - 自定义请求头
 */
function http_request(url, data = {}, method = "GET", customHeaders = {}) {
  // 合并默认请求头和自定义请求头
  const headers = {
    ...instance.defaults.headers.common,
    ...customHeaders
  };

  return new Promise((resolve, reject) => {
    instance({
      url,
      method,
      [method.toUpperCase() === 'GET' ? 'params' : 'data']: data,
      headers
    }).then(response => {
      resolve(response);
    }).catch(error => {
      reject(error);
    });
  });
}

export default http_request; // 直接导出函数